home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagg_m.zip / GRAPHICS.SWG / 0100_PLASMA.pas < prev    next >
Pascal/Delphi Source File  |  1994-05-26  |  2KB  |  70 lines

  1. {
  2. 15 minutes ago I suddenly got a idea to a fullscreen plasma (320*200). But
  3. I have promised my group mates to do no more plasmas so here it is and it
  4. is all yours. It is not 320*200, because I did not do it in assembler since I
  5. am not going to use the routine myself, but it should be pretty easy to
  6. convert.
  7.  
  8.  -+--+--+--- CUT -+--+--+--- }
  9.  
  10.  PROGRAM _320_100_PLASMA;
  11.  
  12.  VAR
  13.   FT :ARRAY [0..511] OF BYTE;
  14.   SINT :ARRAY [0..255] OF BYTE;
  15.   I1,A,B,D,C,OD,COLOR :BYTE;
  16.   X,Y,K,I :WORD;
  17.  
  18.  BEGIN
  19.  {SET 320*200*256}
  20.   ASM
  21.     MOV AX,0013H; INT 10H;
  22.    {THIS THINGGY DOUBLES THE HEIGT OF THE PIXELS}
  23.     mov dx,3d4h
  24.     mov al,9
  25.     out dx,al
  26.     inc dx
  27.     in al,dx
  28.     and al,0e0h
  29.     add al,3
  30.     out dx,al
  31.   END;
  32.  
  33.   {DO PALETTE}
  34.   PORT [$3C8]:=0;
  35.   FOR I:=0 TO 255 DO
  36.     BEGIN
  37.       PORT [$3C9]:=I DIV 4;
  38.       PORT [$3C9]:=I DIV 5;
  39.       PORT [$3C9]:=I DIV 6
  40.     END;
  41.  
  42.   {DO TABLES}
  43.   FOR I:=0 TO 511 DO FT [I]:=ROUND (64+63*SIN (I/40.74));
  44.   FOR I:=0 TO 255 DO SINT [I]:=ROUND (128+127*SIN (I/40.74));
  45.  
  46.   {MAIN LOOP}
  47.   REPEAT
  48.   INC (I1);                    {GRID COUNTER}
  49.   DEC (C,2);
  50.   INC (OD,1);
  51.   D:=OD;
  52.   FOR Y:=0 TO 100 DO
  53.     BEGIN
  54.        K:=Y*320+Y AND 1;     {CALCULATE OFFSET AND ADD ONE EVERY SECOND LINE}
  55. K:=K-(I1 AND 1)*320;  {MOVE GRID ONE PIXEL DOWN EVERY SECOND FRAME}
  56.        INC (D,2);
  57.        A:=SINT [(C+Y) AND 255];
  58.        B:=SINT [(D) AND 255];
  59.          FOR X:=0 TO 159 DO
  60.            BEGIN
  61.              COLOR:=FT [A+B]+FT [Y+B];
  62.              MEM [$A000:K]:=COLOR;
  63.              INC (A,1+COLOR SHR 7);
  64.              INC (B,2); INC (K,2);
  65.              {OFFSET OF PLASMA PIXEL, INCREASED BY TWO TO CREATE THE GRID}
  66.            END;
  67.     END;
  68.  UNTIL PORT [$60]<128; {EXIT IF KEY PRESSED} END.
  69.  
  70.